package solution.liuyu2783.offer;

/**
 * 剑指 Offer 15. 二进制中1的个数
 * 请实现一个函数，输入一个整数（以二进制串形式），输出该数二进制表示中 1 的个数。例如，把 9 表示成二进制是 1001，有 2 位是 1。因此，如果输入 9，则该函数输出 2。
 *
 */
public class Q15_CountInBin_E {

	public static void main(String[] args) {
		System.out.println(hammingWeight(1001));
	}
	
	/**
	 * 思路
	 * 根据 与运算 定义，设二进制数字 nn ，则有：
			若 n & 1 = 0，则 nn 二进制 最右一位 为 0 ；
			若 n & 1 = 1 ，则 nn 二进制 最右一位 为 1 。
		根据以上特点，考虑以下 循环判断 ：
			判断 n 最右一位是否为 1，根据结果计数。
			将 n 右移一位（本题要求把数字 n 看作无符号数，因此使用 无符号右移 操作）。
	 */
	public static int hammingWeight(int n) {
        int count = 0;
        while(n !=0){
            count += n&1;
            n = n>>>1;
        }
        return count;
    }
}
